<?php

/**
 * Description of Util
 *
 * @author 
 */
class Util {

    /**
     * 
     * @param type $tiempoComida
     * @param type $comida_hora
     * @param type $tipo_variante
     * @param type $dia_semana
     * @return type
     */
    public static function buscadorAlimentoMenuSemanal($tiempoComida, $comida_hora, $tipo_variante, $dia_semana) {
        foreach ($tiempoComida as $key1 => $horacomida) {
            foreach ($horacomida as $hora => $tipo_carta) {
                if ($hora == $comida_hora) {
                    foreach ($tipo_carta as $letra => $diasemana) {
                        if ($letra == $tipo_variante) {
                            foreach ($diasemana as $dia => $value) {
                                if ($dia == $dia_semana) {
                                    return $value['alimento'];
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    public static function buscadorPorcionMenuSemanal($tiempoComida, $comida_hora, $tipo_variante, $dia_semana) {
        foreach ($tiempoComida as $key1 => $horacomida) {
            foreach ($horacomida as $hora => $tipo_carta) {
                if ($hora == $comida_hora) {
                    foreach ($tipo_carta as $letra => $diasemana) {
                        if ($letra == $tipo_variante) {
                            foreach ($diasemana as $dia => $value) {
                                if ($dia == $dia_semana) {
                                    return $value['alimento'].", (".$value['medida'] ." = ". $value['cantidad']."g)";
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * Revisa si el usuario tiene acceso dependiendo de las operaciones que se envien
     * @author 
     * @param array $operations
     * @return boolean resultado
     */
    public static function checkAccess($operations) {
        if (is_array($operations)) {
            foreach ($operations as $operation) {
                if (Yii::app()->user->checkAccess($operation)) {
                    return true;
                }
            }
        }
        return false;
    }

    public static function getGridViewId($options, $data) {
        foreach ($options as &$option) {
            if (strpos($option, '$data->') !== false) {
                $propiedad = str_replace('$data->', '', $option);
                $option = $data->$propiedad;
            }
        }
        return $options;
    }

    /**
     * Register a specific js file in the asset's js folder
     * @param string $jsFile
     * @param int $position the position of the JavaScript code.
     * @see CClientScript::registerScriptFile
     */
    public static function tsRegisterAssetJs($jsFile, $position = CClientScript::POS_END) {
        $assetsPath = Yii::getPathOfAlias(YiiBase::app()->getController()->getModule()->getId() . '.assets');
        $assetsUrl = Yii::app()->assetManager->publish($assetsPath, false, "N", true);
        Yii::app()->getClientScript()->registerScriptFile($assetsUrl . "/js/" . YiiBase::app()->getController()->getId() . "/" . $jsFile, $position);
    }

    public static function quitarScripts() {
        Yii::app()->clientScript->scriptMap['*.js'] = false;
        Yii::app()->clientScript->scriptMap['*.css'] = false;
    }

    public static function cambiarFormatoFecha($fecha) {
        list($dia, $mes, $anio) = explode("/", $fecha);
        return $anio . "-" . $mes . "-" . $dia . " 00:00:00";
    }

    public static function cambiarInverseFormatoFecha($fecha) {
        list($anio, $mes, $dia) = explode("-", $fecha);
        list($dia, $horas) = explode(" ", $dia);
        return $dia . "/" . $mes . "/" . $anio;
    }

    public static function FormatDate($fechaAt, $tipo) {
        if ($fechaAt) {
            $date = str_replace('/', '-', $fechaAt);
            $fechaAt = date($tipo, strtotime($date));
            return $fechaAt;
        }
    }

    /**
     * Obtiene la fecha y hora actual segun UTC -5
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return date formato Y-m-d H:i:s
     */
    public static function FechaActual() {
        $tz_object = new DateTimeZone('America/Guayaquil');
        $datetime = new DateTime();
        $datetime->setTimezone($tz_object);
        return $datetime->format('Y-m-d H:i:s');
    }

    /**
     * Cambia el formato del String a presentarse codificando los caracteres 
     * especiales y tildes, se lo usa al buscar un tiempo de comida en la bdd
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param type $tipoComida
     * @return string
     */
    public static function setFormatoVarianteComida($tipoComida) {
        $listaSistema = array("Desayuno", "Almuerzo", "Media-Maniana", "Media-Tarde");
        switch ($tipoComida) {
            case "Media Mañana": return $listaSistema[2];
            case "Media Tarde": return $listaSistema[3];
            case "Desayuno": return $listaSistema[0];
            case "Almuerzo": return $listaSistema[1];
        }
    }

    /**
     * Cambia el formato del String a presentars, ayuda en la presentacion de 
     * la vista del menu semanal
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @param type $tipoComida
     * @return string
     */
    public static function setFormatoTiempoComida($tipoComida) {
        $listaSistema = array("Desayuno", "Almuerzo", "Media Mañana", "Media Tarde");
        switch ($tipoComida) {
            case "Media-Maniana": return $listaSistema[2];
            case "Media-Tarde": return $listaSistema[3];
            case "Desayuno": return $listaSistema[0];
            case "Almuerzo": return $listaSistema[1];
        }
    }

    /**
     * Busca la variante y la codifica sin caracteres especiales (.)
     * @param string $tipo de la variante que se va a codificar
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return string codificado
     */
    public static function setFormatoTipoVariante($tipo) {

        $listaSistema = array("a", "aSopa", "b1", "b2", "b3", "c", "b");
        switch ($tipo) {
            case "a": return $listaSistema[0];
            case "a.Sopa": return $listaSistema[1];
            case "b.1": return $listaSistema[2];
            case "b.2": return $listaSistema[3];
            case "b.3": return $listaSistema[4];
            case "c": return $listaSistema[5];
            case "b": return $listaSistema[6];
        }
    }

    /**
     * Muestra los dias  laborables de la semana en idioma español
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return type
     */
    public static function getDiasLaborablesSemanaEs() {
        return array("Lunes", "Martes", "Miercoles", "Jueves", "Viernes");
    }

    /**
     * Obtiene las medidas de los valores nutricionales
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param String $nombre
     * @return string
     */
    public static function getMedidasValoresNutricionales($nombre) {
        $listaOrigen = ["porcentaje_agua" => "% ",
            "agua_g" => "(g)", "energia_kcal" => "(kcal)", "proteinas_g" => "(kcal)",
            "grasa_total_g" => "(kcal)", "carbohidratos_g" => "(kcal)",
            "fibra_dietetica_g" => "(g)", "fibra_cruda_g" => "(g)",
            "fibra_dietaria_g" => "(g)", "ceniza_g" => "(g)", "calcio_mg" => "(mg)", "fosforo_mg" => "(mg)", "hierro_mg" => "(mg)",
            "tiamina_mg" => "(mg)", "riboflavina_mg" => "(mg)", "niacina_mg" => "(mg)", "vitamina_c_mg" => "(mg)",
            "vitamina_a_eqiv_retinol_mcg" => "(mcg)", "acidos_grasos_monoinsat_g" => "(kcal)",
            "acidos_grasos_poliinsaturad_g" => "(kcal)", "acidos_grasos_saturados_g" => "(kcal)",
            "colesterol_mg" => "(mg)", "potasio_mg" => "(mg)", "sodio_mg" => "(mg)", "zinc_mg" => "(mg)", "magnesio_mg" => "(mg)",
            "vitamina_b6_mg" => "(mg)", "vitamina_b12_mcg" => "(mcg)", "folato_mcg" => "(mcg)", "porcentaje_fracc_comestible" => "%",
            "b_caroteno_equiv_totales_ug" => "(ug)", "retinol_ug" => "(ug)"];
        if (array_key_exists($nombre, $listaOrigen)) {
            return $listaOrigen[$nombre];
        } else {
            return "( )";
        }
    }

    /**
     * Obtiene los nombres de los valores nutricionales
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param string $nombre
     * @return string
     */
    public static function getCambioNombreValNutricional($nombre) {
        $listaOrigen = ["porcentaje_agua" => "Agua ",
            "agua_g" => "Agua ", "energia_kcal" => "Energía ", "proteinas_g" => "Proteínas ",
            "grasa_total_g" => "Grasa total ", "carbohidratos_g" => "Carbohidratos ",
            "fibra_dietetica_g" => "Fibra dietética ", "fibra_cruda_g" => "Fibra cruda ",
            "fibra_dietaria_g" => "Fibra dietaria ", "ceniza_g" => "Ceniza ", "calcio_mg" => "Calcio ", "fosforo_mg" => "Fósforo ", "hierro_mg" => "Hierro ",
            "tiamina_mg" => "Tiamina ", "riboflavina_mg" => "Riboflavina ", "niacina_mg" => "Niacina ", "vitamina_c_mg" => "Vitamina C ",
            "vitamina_a_eqiv_retinol_mcg" => "Vitamina A 'retinol' ", "acidos_grasos_monoinsat_g" => "Ácidos grasos monoinsat ",
            "acidos_grasos_poliinsaturad_g" => "Ácidos grasos poliinsaturad ", "acidos_grasos_saturados_g" => "Ácidos grasos saturados ",
            "colesterol_mg" => "Colesterol ", "potasio_mg" => "Potasio ", "sodio_mg" => "Sodio ", "zinc_mg" => "Zinc ", "magnesio_mg" => "Magnesio ",
            "vitamina_b6_mg" => "Vitamina B6 ", "vitamina_b12_mcg" => "Vitamina B12 ", "folato_mcg" => "Folato ", "porcentaje_fracc_comestible" => "Fracc comestible"
            , "b_caroteno_equiv_totales_ug" => "B caroteno equiv totales ", "retinol_ug" => "Retinol "];
//        if ($listaOrigen[$nombre]) {
        if (array_key_exists($nombre, $listaOrigen)) {
            return $listaOrigen[$nombre];
        } else {
            return $nombre;
        }
    }

    /**
     * Funcion que valida la cédula ecuatoriana
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $strCedula
     * @return boolean
     */
    public static function validarCI($strCedula) {

        $suma = 0;
        $strOriginal = $strCedula;
        $intProvincia = substr($strCedula, 0, 2);
        $intTercero = $strCedula[2];
        $intUltimo = $strCedula[9];
        if (!settype($strCedula, "float"))
            return FALSE;
        if ((int) $intProvincia < 1 || (int) $intProvincia > 23)
            return FALSE;
        if ((int) $intTercero == 7)
            return FALSE;
        for ($indice = 0; $indice < 9; $indice++) {
//echo $strOriginal[$indice],'</br>';
            switch ($indice) {
                case 0:
                case 2:
                case 4:
                case 6:
                case 8:
                    $arrProducto[$indice] = $strOriginal[$indice] * 2;
                    if ($arrProducto[$indice] >= 10)
                        $arrProducto[$indice] -= 9;
//echo $arrProducto[$indice],'</br>';
                    break;
                case 1:
                case 3:
                case 5:
                case 7:
                    $arrProducto[$indice] = $strOriginal[$indice] * 1;
                    if ($arrProducto[$indice] >= 10)
                        $arrProducto[$indice] -= 9;
//echo $arrProducto[$indice],'</br>';
                    break;
            }
        }
        foreach ($arrProducto as $indice => $producto)
            $suma += $producto;
        $residuo = $suma % 10;
        $intVerificador = $residuo == 0 ? 0 : 10 - $residuo;
        return ($intVerificador == $intUltimo ? TRUE : FALSE);
    }

    /**
     * Obtiene la ip del usuari
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return ip
     */
    public static function obtenerIpUsuario() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }

    /**
     * Obtiene el dispositivo desde el cual se conecta el usuario
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return string
     */
    public static function obtenerDispositivoUsuario() {
        $detect = Yii::app()->mobileDetect;
        if ($detect->isMobile()) {
            return "Mobile";
        } else if ($detect->isTablet()) {
            return "Tablet";
        } else if ($detect->isIphone()) {
            return "Iphone";
        } else {
            return "Pc";
        }
    }
    
      public static function setFormatoInterpretacion($cadena) {
        $listaSistema = array("Bajo peso", "Riesgo bajo peso", "Peso normal", "Riesgo sobrepeso", "Sobrepeso",
            "Baja talla severa", "Talla baja", "Talla normal", "Talla alta", "Talla muy alta");
        switch ($cadena) {
            case "BAJOPESO": return $listaSistema[0];
            case "RIESGOBAJOPESO": return $listaSistema[1];
            case "PESONORMAL": return $listaSistema[2];
            case "RIESGOSOBREPESO": return $listaSistema[3];
            case "SOBREPESO": return $listaSistema[4];
            case "BAJATALLASEVERA": return $listaSistema[5];
            case "TALLABAJA": return $listaSistema[6];
            case "TALLANORMAL": return $listaSistema[7];
            case "TALLAALTA": return $listaSistema[8];
            case "TALLAMUYALTA": return $listaSistema[9];
        }
        
    }

}

?>
